// 数组中只有1种数出现次数少于m次，其他数都出现了m次
// 返回出现次数小于m次的那种数
// 测试链接 : https://leetcode.cn/problems/single-number-ii/
public class OneKindNumberLessMtimes {

    public static void main(String[] args) {
        int[] nums = {1,1,1,2,2,2,3,3,3,7,7,7,9,9};
        System.out.println(singleNumber(nums));
    }

    public static int singleNumber(int[] nums) {
        int m = 3;
        int[] cnts = new int[32];  //存放int类型2进制中每一个位置含有1的个数
        for(int num : nums) {
            for(int i = 0; i < 32; i++) {
                if( (num >> i & 1) == 1 ) {
                    cnts[i]++;
                }
            }
        }

        int ans = 0;
        for(int i = 0; i < 32; i++) {
            if(cnts[i] % m != 0) {
                ans |= (1 << i);
            }
        }
        return ans;
    }
}
